import {
  Entity,
  Column,
  PrimaryGeneratedColumn,
  CreateDateColumn,
  UpdateDateColumn,
  ManyToOne,
  JoinColumn,
} from 'typeorm';
import { User } from '../../users/entities/user.entity';
import { Tool } from '../../tools/entities/tool.entity';

@Entity('reviews')
export class Review {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ type: 'int' })
  toolId: number;

  @Column({ type: 'int' })
  userId: number;

  // 总体评分 (1-5)
  @Column({ type: 'decimal', precision: 2, scale: 1 })
  rating: number;

  // 多维度评分 (1-5)
  @Column({ type: 'decimal', precision: 2, scale: 1, nullable: true })
  performanceRating: number; // 性能评分

  @Column({ type: 'decimal', precision: 2, scale: 1, nullable: true })
  priceRating: number; // 价格评分

  @Column({ type: 'decimal', precision: 2, scale: 1, nullable: true })
  easeOfUseRating: number; // 易用性评分

  @Column({ type: 'decimal', precision: 2, scale: 1, nullable: true })
  documentationRating: number; // 文档质量评分

  // 评论内容
  @Column({ type: 'text' })
  content: string;

  @Column({ type: 'varchar', length: 200, nullable: true })
  title: string; // 评论标题

  // 使用场景/上下文
  @Column({ type: 'varchar', length: 100, nullable: true })
  useCase: string; // 例如：个人项目、团队协作、企业级应用

  @Column({ type: 'varchar', length: 100, nullable: true })
  teamSize: string; // 例如：1人、2-10人、10-50人、50+人

  @Column({ type: 'varchar', length: 100, nullable: true })
  usageDuration: string; // 使用时长：< 1个月、1-6个月、6-12个月、1年+

  // 互动数据
  @Column({ type: 'int', default: 0 })
  helpfulCount: number; // 有帮助的数量

  @Column({ type: 'int', default: 0 })
  notHelpfulCount: number; // 无帮助的数量

  // 状态
  @Column({ type: 'enum', enum: ['pending', 'approved', 'rejected'], default: 'pending' })
  status: string; // 审核状态

  @Column({ type: 'boolean', default: false })
  isVerifiedPurchase: boolean; // 是否为验证用户（付费会员或确认使用过该工具）

  @Column({ type: 'boolean', default: false })
  isFeatured: boolean; // 是否为精选评论

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;

  // 关联
  @ManyToOne(() => Tool, { onDelete: 'CASCADE' })
  @JoinColumn({ name: 'toolId' })
  tool: Tool;

  @ManyToOne(() => User, { onDelete: 'CASCADE' })
  @JoinColumn({ name: 'userId' })
  user: User;
}

